package com.vihivision.bluetooth;

import android.util.ArraySet;
import android.util.Log;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * Created by iyangfeng on 18/3/19.
 */

public class BluetoothTranstion {
    private static String Tag="BluetoothTranstion";
    private static BluetoothTranstion bluetoothTranstion=null;

    public static BluetoothTranstion getInstance() {
        if (bluetoothTranstion == null){
            bluetoothTranstion = new BluetoothTranstion();
        }

        return bluetoothTranstion;
    }

//    int le_send(u8 * buffer, int lens) {   // 53  70

//        int i;
//        int pkcnt = (lens + 17) / 18;
//        u8 pdata[20];
//        for (i = 0; i < pkcnt; i++) {
//            bzero(pdata, 20);
//            if (lens <= 18) {
//                pdata[0] = 0xff;
//            } else {
//                pdata[0] = i;
//            }
//            pdata[1] = 0xaa;
//            if (lens >= 18) {
//                memcpy(pdata + 2, buffer, 18);
//            } else {
//                memcpy(pdata + 2, buffer, lens);
//            }
//            lens -= 18;
//            buffer += 18;
//            le_send(pdata,20);
//
//        }
//        return 0;
//    }

    int Write(byte[] buffer,int lens)
    {
        int ret = -1;
        int offset = 0;

        do {
            if ((buffer == null)||(lens <= 0)){
                Log.e(Tag,"buffer is null lens:"+lens);
                break;
            }
            byte i;
            int pkcnt = (lens + 17) / 18;
            byte[] pdata= new byte[20];
            for (i = 0; i < pkcnt; i++) {
                Arrays.fill(pdata, (byte) 0);
                if (lens <= 18) {
                    pdata[0] = (byte) 0xff;
                } else {
                    pdata[0] = i;
                }
                pdata[1] = (byte)0xaa;
                if (lens >= 18) {
                    //memcpy(pdata + 2, buffer, 18);
                    System.arraycopy(buffer,offset,pdata,2,18);
                } else {
                    System.arraycopy(buffer,offset,pdata,2,lens);
                    //memcpy(pdata + 2, buffer, lens);
                }
                lens -= 18;
                offset += 18;
                //le_send(pdata,20);
                // 发送 20个

            }
            ret = 0;
        }while (false);

        return ret;
    }


//    int ble_server(void * p) {
//        u8 *buffer = (u8 *) malloc(1024);
//        u8 *blebuf = (u8 *) malloc(128);
//
//        int pkidx = 0;
//        int bufidx = 0;
//
//        while (1) {
//            int ret = bleRecv(blebuf);
//            if (ret <= 0) {
//                usleep(10 * 1000);
//                continue;
//            }
//            if (pkidx == 0) {
//                bufidx = 0;
//            }
//            memcpy(buffer + bufidx, blebuf + 2, ret - 2);
//            bufidx += (ret - 2);
//            if (blebuf[1] == 0xaa) {
//                if (pkidx == blebuf[0]) {
//                    pkidx++;
//                } else if (blebuf[0] == 0xff) {
//                    //process ble data
//                    // data is in :buffer lens is:bufidx
//
//                    //process data now
//
//                    pkidx = 0;
//                } else {
//                    pkidx = 0;
//                }
//            } else {
//                pkidx = 0;
//            }
//        }
//        free(buffer);
//        return 0;
//    }


    int BluRecevie(byte[] recevieBuffer) throws InterruptedException {
        int ret = -1;

        do {
            if (recevieBuffer == null){
                Log.e(Tag,"recevieBuffer is null ");
                break;
            }

            byte[] buffer = new byte[1024];
            byte[] blebuf = new byte[128];

            int pkidx = 0;
            int bufidx = 0;

            while (true)
            {
                int lret = 0;// blebuf 传递进去
                if (lret <= 0){
                    Thread.sleep(100);
                    continue;
                }

                if (pkidx == 0){
                    bufidx = 0;
                }
                System.arraycopy(blebuf,2,buffer,bufidx,lret-2);
                bufidx +=(lret-2);
                if (blebuf[1] == 0xaa){
                    if (pkidx == blebuf[0]){
                        pkidx ++;
                    }else if(blebuf[0] == 0xff){

                        Log.e(Tag,"===============  bufidx:"+bufidx);
                        pkidx = 0;
                        // 跳出
                        break;
                    }else {
                        pkidx = 0;
                    }
                }else {
                    pkidx = 0;
                }
            }
            ret = 0;
        }while (false);

        return ret;
    }











}
